/**
 * edurender
 * ersw_main.c
 * (c) 2009 J. Brad Byrd
 */

#ifndef ERSW_TEXTURE_H
#define ERSW_TEXTURE_H

#include "ersw_types.h"

#define ERSW_MAX_MIP_LEVELS    (10)
#define ERSW_MAX_TEXTURE_SIZE  (1 << ERSW_MAX_MIP_LEVELS)

typedef struct ERSWTexture2D
{
	ERFormat format;
	void *texels[ERSW_MAX_MIP_LEVELS];	
	ERushort width;
	ERushort height;
	ERushort mips;
} ERSWTexture2D;

typedef enum ERSWFilter
{
	ERSW_FILTER_NEAREST,
	ERSW_FILTER_LINEAR,
	
	ERSW_MAX_FILTER,
} ERSWFilter;

typedef enum ERSWWrap
{
	ERSW_WRAP_CLAMP,
	ERSW_WRAP_REPEAT,
} ERSWWrap;

typedef struct ERSWSampler
{
	ERSWFilter min;
	ERSWFilter mag;
	ERSWFilter mip;
	ERSWWrap sWrap;
	ERSWWrap tWrap;
	ERSWWrap rWrap;
} ERSWSampler;

ERSWTexture2D *erswCreateTexture2D(ERushort width, ERushort height, ERFormat format);
void erswDestroyTexture2D(ERSWTexture2D *texture);
void erswTexture2DUpload(ERSWTexture2D *texture, ERushort mip, const void *texels);

ERRgbaColor erswTexture2DSample(const ERSWTexture2D *texture, const ERSWSampler *sampler,
	ERint u, ERint v);

#endif /* ERSW_TEXTURE_H */
